﻿using SQ.BLL.Factory;
using SQ.BLL.Interfaces;
using SQ.Calculador.Configuration;
using SQ.Calculador.Interfaces;
using SQ.Calculadora.Interfaces;
using SQ.Domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SQ.Calculador
{
    public class CalculadorTempoMedio : ICalculador
    {
        private IFilaBS filaBS = BLLFactory.getFilaBS();
        private ICalculadora calculadora;
        private CalculadoraConfig calculadoraConfig;

        public CalculadorTempoMedio(CalculadoraConfig calculadoraConfig)
        {
            this.calculadoraConfig = calculadoraConfig;
            calculadora = GetInstanceCalculadora(this.calculadoraConfig.calculadora.InstanciaCalculadora);
        }

        public void CalcularTempoMedioEspera()
        {
            IList<Fila> listaFilasAbertas;

            while (true)
            {
                listaFilasAbertas = ObterFilasParaCalculoDoTempo();

                if (listaFilasAbertas != null)
                {
                    foreach (var fila in listaFilasAbertas)
                    {
                        if (this.calculadoraConfig.calculadora.framework.ProcessamentoParalelizado.Equals("true"))
                        {

                        }
                    }
                }
            }



        }

        private ICalculadora GetInstanceCalculadora(string instanciaCalculadora)
        {
            return (ICalculadora)Activator.CreateInstance(Type.GetType(instanciaCalculadora));
        }

        private IList<Fila> ObterFilasParaCalculoDoTempo()
        {
            IList<Fila> listaFilasParaCalculoTempoMedio = filaBS.GetFilasAbertas();

            return listaFilasParaCalculoTempoMedio;
        }
    }
}
